# df数据 ： sort_values()   类似于  SQL中：order by xxx
# 参数
# by: 指定列名
# 轴 axis  :  *0行 1列
# ascending : *True升序   False 降序
# inplace: True 在原数据上修改 ， * False 返回新数据
# kind：排序算法：quicksort *快排 ， mergesort 归并排序 ， heapsort 堆排序
# na_position: first-空值在前   *last-空值在后
# ignore_index: True-重置索引   *False-保留原索引

import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.max_columns',500)
pd.set_option('display.width',1000)



excelFile = './data/mrbook.xlsx'
df = pd.DataFrame(pd.read_excel(excelFile))
# ---------------销量降序----------------
# df = df.sort_values(by='销量',ascending=False)
# print(df)
# 按照多列数据排序
# df = df.sort_values(by=['图书名称','销量'])
# print(df)
# 对统计结果进行排序
df1 = (df.groupby(['类别'])['销量']
       .sum().reset_index())
df2 = df1.sort_values(by='销量',ascending=False)
# print(df2)
# 按行数据排序
excelFile = './data/books.xls'
dfrow = pd.DataFrame(pd.read_excel(excelFile))
# 按行排序的数据类型要一致
# print(dfrow.sort_values(by=0,ascending=True,axis=1))


# --------------------rank 数据排名----------------------
# axis:  *0行  1列
# method: *average平均值  first出现顺序  max 最大值  min最小值....
# numeric_only：True只针对数值类型排名   * False 所有数据排名
# na_option: keep 保留空值 top控制排名在前   botttom 控制排名在后
# ascending ： *True升序 False
# pct ： True排名百分比   * False排名
df = df.sort_values(by='销量',ascending=False)
# 顺序排名
df['顺序排名'] = (df['销量']
                .rank(method='first',ascending=False))
# print(df[['图书名称','销量','顺序排名']])
# 平均值排名
df['平均排名'] = df['销量'].rank(ascending=False)
# print(df[['图书名称','销量','平均排名']])
# 倒序销量 , 倒序排名
print(df[['销量']].rank(method='max'))
# 倒序销量,正序排名
print(df[['销量']].rank(method='max',ascending=False))
